Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
75.00% |
3 / 4 |
CRAP | |
97.37% |
37 / 38 |
| ProductSaver | |
0.00% |
0 / 1 |
|
75.00% |
3 / 4 |
9 | |
97.37% |
37 / 38 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
| save | |
100.00% |
1 / 1 |
1 | |
100.00% |
9 / 9 |
|||
| saveAll | |
0.00% |
0 / 1 |
5.01 | |
94.12% |
16 / 17 |
|||
| validateProduct | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
| <?php | |
| namespace Akeneo\Pim\Enrichment\Bundle\Doctrine\Common\Saver; | |
| use Akeneo\Pim\Enrichment\Component\Product\Manager\CompletenessManager; | |
| use Akeneo\Pim\Enrichment\Component\Product\Model\ProductInterface; | |
| use Akeneo\Tool\Component\StorageUtils\Saver\BulkSaverInterface; | |
| use Akeneo\Tool\Component\StorageUtils\Saver\SaverInterface; | |
| use Akeneo\Tool\Component\StorageUtils\StorageEvents; | |
| use Doctrine\Common\Persistence\ObjectManager; | |
| use Doctrine\Common\Util\ClassUtils; | |
| use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
| use Symfony\Component\EventDispatcher\GenericEvent; | |
| /** | |
| * Product saver, define custom logic and options for product saving | |
| * | |
| * @author Nicolas Dupont <nicolas@akeneo.com> | |
| * @copyright 2014 Akeneo SAS (http://www.akeneo.com) | |
| * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) | |
| */ | |
| class ProductSaver implements SaverInterface, BulkSaverInterface | |
| { | |
| /** @var ObjectManager */ | |
| protected $objectManager; | |
| /** @var CompletenessManager */ | |
| protected $completenessManager; | |
| /** @var EventDispatcherInterface */ | |
| protected $eventDispatcher; | |
| /** @var ProductUniqueDataSynchronizer */ | |
| protected $uniqueDataSynchronizer; | |
| /** | |
| * @param ObjectManager $objectManager | |
| * @param CompletenessManager $completenessManager | |
| * @param EventDispatcherInterface $eventDispatcher | |
| * @param ProductUniqueDataSynchronizer $uniqueDataSynchronizer | |
| */ | |
| public function __construct( | |
| ObjectManager $objectManager, | |
| CompletenessManager $completenessManager, | |
| EventDispatcherInterface $eventDispatcher, | |
| ProductUniqueDataSynchronizer $uniqueDataSynchronizer | |
| ) { | |
| $this->objectManager = $objectManager; | |
| $this->completenessManager = $completenessManager; | |
| $this->eventDispatcher = $eventDispatcher; | |
| $this->uniqueDataSynchronizer = $uniqueDataSynchronizer; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function save($product, array $options = []) | |
| { | |
| $this->validateProduct($product); | |
| $options['unitary'] = true; | |
| $this->eventDispatcher->dispatch(StorageEvents::PRE_SAVE, new GenericEvent($product, $options)); | |
| $this->completenessManager->generateMissingForProduct($product); | |
| $this->uniqueDataSynchronizer->synchronize($product); | |
| $this->objectManager->persist($product); | |
| $this->objectManager->flush(); | |
| $this->eventDispatcher->dispatch(StorageEvents::POST_SAVE, new GenericEvent($product, $options)); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function saveAll(array $products, array $options = []) | |
| { | |
| if (empty($products)) { | |
| return; | |
| } | |
| $products = array_unique($products, SORT_REGULAR); | |
| foreach ($products as $product) { | |
| $this->validateProduct($product); | |
| } | |
| $options['unitary'] = false; | |
| $this->eventDispatcher->dispatch(StorageEvents::PRE_SAVE_ALL, new GenericEvent($products, $options)); | |
| foreach ($products as $product) { | |
| $this->eventDispatcher->dispatch(StorageEvents::PRE_SAVE, new GenericEvent($product, $options)); | |
| $this->completenessManager->generateMissingForProduct($product); | |
| $this->uniqueDataSynchronizer->synchronize($product); | |
| $this->objectManager->persist($product); | |
| } | |
| $this->objectManager->flush(); | |
| foreach ($products as $product) { | |
| $this->eventDispatcher->dispatch(StorageEvents::POST_SAVE, new GenericEvent($product, $options)); | |
| } | |
| $this->eventDispatcher->dispatch(StorageEvents::POST_SAVE_ALL, new GenericEvent($products, $options)); | |
| } | |
| protected function validateProduct($product) | |
| { | |
| if (!$product instanceof ProductInterface) { | |
| throw new \InvalidArgumentException( | |
| sprintf( | |
| 'Expects a %s, "%s" provided', | |
| ProductInterface::class, | |
| ClassUtils::getClass($product) | |
| ) | |
| ); | |
| } | |
| } | |
| } |